

ardroneUtil = {
	
    drone : null, 
	
	init: function(){
		console.log("initialisation de la classe utilitaire drone");
		this.drone = drone;
	},

	//Si l'élément de retour n'est pas précisé pour la fonction, elle retournera un booléen avec le résultat d'éxecution de la fonction 
	//mouvements de base
	avancer : function(speed){
		console.log( '--Begin--Appel de la fonction "avancer"');
		this.drone.front(speed);
        ardroneUtil.allerAGauche(speed/3);
		console.log( '--End--Appel de la fonction "avancer"');
	},
	reculer : function(speed){
		console.log( '--Begin--Appel de la fonction "reculer"');
		this.drone.back(speed);
        ardroneUtil.allerAGauche(speed/3);
		console.log( '--End--Appel de la fonction "reculer"');
	},
	allerAGauche : function(speed){
		console.log( '--Begin--Appel de la fonction "allerAGauche"');
		this.drone.left(speed); 
		console.log( '--End--Appel de la fonction "allerAGauche"');
	},
	allerADroite : function(speed){
		console.log( '--Begin--Appel de la fonction "allerADroite"');
		this.drone.right(speed);
		console.log( '--End--Appel de la fonction "allerADroite"'	);
	},
	tournerDeXdegre  : function(speed){
		console.log( '--Begin--Appel de la fonction "tournerDeXdegre"');
		this.drone.clockwise(speed);
		console.log( '--End--Appel de la fonction "tournerDeXdegre"');
	},
	/**
	 *  type accepté : 'flipAhead', 'flipBehind', 'flipLeft', 'flipRight'
	 */
	flip : function(typeFlip, duree){
		console.log( 'Appel de la fonction "flip"');
		var resultat = this.drone.animate(typeFlip, duree);
        if(!resultat){
            console.log('La batterie est trop faible, le flip ne sera pas executé');
        }else{
            console.log(' HEY TAYOOO');
        }
	},
	//gestion de l'altitude
	augmenterAltitude : function(altitude){
		console.log( '--Begin--Appel de la fonction "augmenterAltitude"');
		this.drone.up(altitude);
		console.log( '--End--Appel de la fonction "augmenterAltitude"');
	},
	diminuerAltitude : function(altitude){
		console.log( '--Begin--Appel de la fonction "diminuerAltitude"');
		this.drone.down(altitude);
		console.log( '--End--Appel de la fonction "diminuerAltitude"');
	},
	//arret d'urgence
	arretUrgenceClassique : function(){
		//le drone s'immobilise et atterit
		console.log( '--Begin--Appel de la fonction "arretUrgenceClassique"');
		this.drone.stop();
		this.drone.land();
		console.log( '--End--Appel de la fonction "arretUrgenceClassique"'	);
	},
	arretUrgenceSoft : function(){
		//le drone ne stope pas ses mouvements mais la fonction diminuerAltitude() est lancer pour qu'il se pose
		console.log( '--Begin--Appel de la fonction "arretUrgenceSoft"');
		this.diminuerAltitude(0.2);
		this.drone.land();
		console.log( '--End--Appel de la fonction "arretUrgenceSoft"'	);
	},
	arretUrgenceHard : function(){
		//le drone ne stope pas ses mouvements mais l'alimentation est coupé
		console.log( '--Begin--Appel de la fonction "arretUrgenceHard"');
		BOOBS();
		console.log( '--End--Appel de la fonction "arretUrgenceHard"'	);
	},
	
	//fonctions annexes
	prendreUnePhoto : function(compteurPhoto){
		//prise de photo par la caméra inférieure. /!\ la photo se nommera selon la string compteurPhoto passé en parametre
		console.log( '--Begin--Appel de la fonction "prendreUnePhoto"');
		
		console.log( '--End--Appel de la fonction "prendreUnePhoto"');
	},
	/**
	 * le drone est allumé de base, il se place a X cm de hauteur
	 * @param cb fonction appelé après le décollage
	 */
	decoller : function(){
		console.log( '--Begin--Appel de la fonction "miseEnmarche"');
		this.drone.takeoff();
//		this.drone.augmenterAltitude(hauteur);
		console.log( '--End--Appel de la fonction "miseEnmarche"');
	},
	immobilise : function(){
		//le drone stop tous ses mouvements (vitesse, modification altitude)
		console.log( '--Begin--Appel de la fonction "immobilise"');
		this.drone.stop();
		console.log( '--End--Appel de la fonction "immobilise"');
	},
	filmer : function(){
		//le drone lance le record
		console.log( '--Begin--Appel de la fonction "filmer"');

		console.log( '--End--Appel de la fonction "filmer"');
	},
	stopFilmer : function(){
		//le drone stop le record
		console.log( '--Begin--Appel de la fonction "stopFilm"');

		console.log( '--End--Appel de la fonction "stopFilm"');
	},
	//fonction du gps	
	poserUneBalise : function(){
		//la fonction retourne un instance de la classe Point en initialisant x et y
		console.log( '--Begin--Appel de la fonction "poserUneBalise"');
		
		console.log( '--End--Appel de la fonction "poserUneBalise"');
	},
	allerVersB : function(PointB){
		//la fonction prend en parametre 1 argument de type Point. Elle retournera true dés que la fonction est lancé sans attendre que le drone soit en B. 
		console.log( '--Begin--Appel de la fonction "allerDeAversB"');

		console.log( '--End--Appel de la fonction "allerDeAversB"');
	},
	positionActuelle : function(){
		// la fonction retourne un type Point mis é jour avec la position actuelle du drone
		console.log( '--Begin--Appel de la fonction "positionActuelle"');

		console.log( '--End--Appel de la fonction "positionActuelle"');
	},
	//detection de ligne
	detecteLaLigne : function(){
		//retourne true dés qu'une ligne est detecté
		console.log( '--Begin--Appel de la fonction "detecteLaLigne"');

		console.log( '--End--Appel de la fonction "detecteLaLigne"');
	},
	suivreLaLigne : function(){
		//la fonction suit la ligne (mouvement adapté é gérer) tant que !changementDirection()
		console.log( '--Begin--Appel de la fonction "suivreLaLigne"');

		console.log( '--End--Appel de la fonction "suivreLaLigne"');
	},
	changementDeDirection : function(){
		//retourne true dés qu'un changement de direction est detecté (de 10é ?) => présence d'un coin
		console.log( '--Begin--Appel de la fonction "changementDeDirection"');

		console.log( '--End--Appel de la fonction "changementDeDirection"');
	},
	testFonctIA: function(){
		this.decoller();
        this.drone.after(1500, function() {
           ardroneUtil.immobilise();
        })
        this.drone.after(5000, function() {
			ardroneUtil.avancer(0.3);
		})
        this.drone.after(2200, function() {
           ardroneUtil.immobilise();
        })
         this.drone.after(1500, function() {
			ardroneUtil.reculer(0.3);
		})
        .after(1300, function() {
           ardroneUtil.immobilise();
          
        })
        .after(3000, function() {
            ardroneUtil.allerAGauche(0.2);
        })

        .after(1300, function() {
           ardroneUtil.immobilise();
          
        })
        .after(3000, function() {
            ardroneUtil.arretUrgenceClassique();
        });
	},
	testDeplacementsIA: function(){
		var x=0;
		var y=0;
		var temps=1000;
		var tempsImmobilise=2500;
		var vitesse=0.1;
		console.log( '-----X = '+x+' _ Y='+y+'-----');
		this.decoller();
        this.drone.after(5000, function() {
           ardroneUtil.immobilise();
        })
        this.drone.after(temps, function() {
			ardroneUtil.avancer(vitesse);
			y+=1;
			console.log( '-----AVANCER-----');
		})
		/* this.drone.after(temps, function() {
           ardroneUtil.immobilise();
        })
        this.drone.after(tempsImmobilise, function() {
			ardroneUtil.allerAGauche(vitesse);
			x-=1;
			console.log( '-----allerAGauche-----');
		}) */
		this.drone.after(temps, function() {
           ardroneUtil.immobilise();
        })
        this.drone.after(tempsImmobilise, function() {
			ardroneUtil.reculer(vitesse);
			y-=1;
			console.log( '-----reculer-----');
		})
		this.drone.after(temps, function() {
           ardroneUtil.immobilise();
        })
       /*  
        this.drone.after(tempsImmobilise, function() {
			ardroneUtil.allerADroite(vitesse);
			x+=1;
			console.log( '-----allerADroite-----');
		}) */
		this.drone.after(temps, function() {
           ardroneUtil.immobilise();
           console.log( '-----X = '+x+' _ Y='+y+'-----toto');
        })
        this.drone.after(temps, function() {
        	ardroneUtil.arretUrgenceClassique();
        })
	},
	
}
var ardroneUtil = ardroneUtil;
ardroneUtil.init();
//ardroneUtil.testFonctIA();
drone.createRepl();